﻿using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using LeadThing.AbpZeroTemplate.DisputeInformations.Dtos;
using LeadThing.AbpZeroTemplate.Dto;
using LeadThing.AbpZeroTemplate.WorkFlow_Run_Processs.Dtos;

namespace LeadThing.AbpZeroTemplate.DisputeInformations
{
    /// <summary>
    /// 矛盾纠纷信息服务接口
    /// </summary>
    public interface IDisputeInformationAppService : IApplicationService
    {
        #region 扩展方法

        /// <summary>
        /// 催办
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task Reminders(RemindersEditDto input);

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息分页列表（跟踪督办）
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<DisputeInformationListDto>> GetPagedDisputeInformationsGzdbAsync(GetDisputeInformationInput input);

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息分页列表（无数据权限）
        /// </summary>
        Task<PagedResultDto<DisputeInformationListDto>> GetPagedDisputeInformationsNoUserAsync(GetDisputeInformationInput input);

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<DisputeInformationListDto>> GetDisputeInformationsByWhereAsync(GetDisputeInformationInput input);

        /// <summary>
        /// 获取所有纠纷来源
        /// </summary>
        /// <returns></returns>
        List<ComboboxItemDto> GetAllDisSourceList();

        /// <summary>
        /// 获取所有紧急程度
        /// </summary>
        /// <returns></returns>
        List<ComboboxItemDto> GetAllDisUrgencyList();

        /// <summary>
        /// 获取所有流程节点
        /// </summary>
        /// <returns></returns>
        List<ComboboxItemDto> GetAllWorkFlowProcesssList(NullableIdDto<long> input);

        /// <summary>
        /// 新增或更改矛盾纠纷信息（公共方法）
        /// </summary>
        Task CreateOrUpdateDisputeInformationCommonAsync(CreateOrUpdateDisputeInformationInput input);

        /// <summary>
        /// 新增矛盾纠纷信息（公共方法）
        /// </summary>
        Task<DisputeInformationEditDto> CreateDisputeInformationCommonAsync(DisputeInformationEditDto input);

        /// <summary>
        /// 编辑矛盾纠纷信息（公共方法）
        /// </summary>
        Task UpdateDisputeInformationCommonAsync(DisputeInformationEditDto input);

        /// <summary>
        /// 统计平安无事
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<object>> GetPingAnWuShi(GetDisputeInformationInput input);

        /// <summary>
        /// 获取时间统计
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<TimeStatisticsListDto>> GetTimeStatistics(GetDisputeInformationInput input);

        /// <summary>
        /// 获取柱状图数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<object>> GetBarChart();

        /// <summary>
        /// 获取饼图数据
        /// </summary>
        /// <returns></returns>
        Task<ListResultDto<object>> GetPie();

        /// <summary>
        /// 获取各种类型纠纷在各乡镇中的占比
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<ListResultDto<object>> GetTownPie(GetDisputeInformationInput input);

        #endregion

        #region 矛盾纠纷信息管理

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息分页列表
        /// </summary>
        Task<PagedResultDto<DisputeInformationListDto>> GetPagedDisputeInformationsAsync(GetDisputeInformationInput input);
        Task<PagedResultDto<DisputeCountListDto>> GetPagedDisputeInformationsCountByGroup(GetDisputeInformationInput input);

        /// <summary>
        /// 通过Id获取矛盾纠纷信息信息进行编辑或修改 
        /// </summary>
        Task<GetDisputeInformationForEditOutput> GetDisputeInformationForEditAsync(NullableIdDto<long> input);

        /// <summary>
        /// 通过指定id获取矛盾纠纷信息ListDto信息
        /// </summary>
        Task<DisputeInformationListDto> GetDisputeInformationByIdAsync(EntityDto<long> input);



        /// <summary>
        /// 新增或更改矛盾纠纷信息
        /// </summary>
        Task CreateOrUpdateDisputeInformationAsync(CreateOrUpdateDisputeInformationInput input);





        /// <summary>
        /// 新增矛盾纠纷信息
        /// </summary>
        Task<DisputeInformationEditDto> CreateDisputeInformationAsync(DisputeInformationEditDto input);

        /// <summary>
        /// 更新矛盾纠纷信息
        /// </summary>
        Task UpdateDisputeInformationAsync(DisputeInformationEditDto input);

        /// <summary>
        /// 删除矛盾纠纷信息
        /// </summary>
        Task DeleteDisputeInformationAsync(EntityDto<long> input);

        /// <summary>
        /// 批量删除矛盾纠纷信息
        /// </summary>
        Task BatchDeleteDisputeInformationAsync(List<long> input);

        #endregion

        #region Excel导出功能

        /// <summary>
        /// 获取矛盾纠纷信息信息转换为Excel
        /// </summary>
        /// <returns></returns>
        Task<FileDto> GetDisputeInformationToExcel();

        #endregion

        #region APP接口

        /// <summary>
        /// 通过Id获取矛盾纠纷信息信息进行编辑或修改 
        /// </summary>
        Task<DisputeInformationAPPEditDto> GetDisputeInformationForAPPEditAsync(EntityDto<string> input);

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息分页列表（超时一个月）
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<PagedResultDto<DisputeInformationListDto>> GetPagedDisputeInformationsOverTimeAPPAsync(GetDisputeInformationIOSInput input);

        /// <summary>
        /// 根据查询条件获取矛盾纠纷信息分页列表
        /// </summary>
        Task<PagedResultDto<DisputeInformationListDto>> GetPagedDisputeInformationsIOSAsync(GetDisputeInformationIOSInput input);

        /// <summary>
        /// 新增矛盾纠纷信息
        /// </summary>
        Task<DisputeInformationEditDto> CreateDisputeInformationIOSAsync(DisputeInformationIOSEditDto input);

        /// <summary>
        /// 编辑矛盾纠纷信息
        /// </summary>
        Task UpdateDisputeInformationIOSAsync(DisputeInformationIOSEditDto input);

        /// <summary>
        /// 分流
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task ShuntIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 现场调处
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task MediationIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 意见
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SuggessIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 成功
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task SuccessIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 失败
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task FailIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 上传协议书
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task UploadAgreementIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 拒签
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task RefuseIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 履行
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task PerformIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 未履行
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task UnfulfilledIOS(FenLiuIOSEditDto input);

        /// <summary>
        /// 结案归档
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task ConfirmIOS(FenLiuIOSEditDto input);

        #endregion

    }
}
